package com.smartboot.plus.controller;

import com.smartboot.plus.api.R;
import com.smartboot.plus.ignite.cache.MqttMetricCache;
import com.smartboot.plus.service.MqttMetricService;
import com.smartboot.plus.vo.MqttEndpointNodeVO;
import com.smartboot.plus.vo.MqttJvmCpuVO;
import com.smartboot.plus.vo.MqttNodeInfoVO;
import com.smartboot.plus.wapper.EndpointNodeWrapper;
import com.smartboot.plus.wapper.JvmCpuNodeWrapper;
import com.smartboot.plus.wapper.NodeInfoWrapper;
import tech.smartboot.feat.cloud.annotation.Autowired;
import tech.smartboot.feat.cloud.annotation.Controller;
import tech.smartboot.feat.cloud.annotation.Param;
import tech.smartboot.feat.cloud.annotation.RequestMapping;

import java.util.List;
import java.util.Map;

@Controller("dashBoard")
public class DashBoardController {



    @Autowired
    private MqttMetricService mqttMetricService;


    /**
     * 下拉节点
     * 
     * @return
     */
    @RequestMapping("/node/down")
    public R<List<Map<String, String>>> down() {
        return R.data(mqttMetricService.clusterDown());
    }

    /**
     * 节点信息
     *
     * @return
     */
    @RequestMapping("/node/info")
    public R<MqttNodeInfoVO> clusterNodes(@Param("nodeId") String nodeId) {
        MqttMetricCache mqttMetricCache = mqttMetricService.nodeInfoNode(nodeId);

        MqttNodeInfoVO mqttNodeInfoVO = NodeInfoWrapper.build().entityVO(mqttMetricCache);
        return R.data(mqttNodeInfoVO);
    }

    /**
     * 节点jvm cpu 信息
     *
     * @param nodeId
     * @return
     */
    @RequestMapping("/jvm/node")
    public R<MqttJvmCpuVO> jvmNodeInfo(@Param("nodeId") String nodeId) {
        MqttMetricCache mqttMetricCache = mqttMetricService.nodeJvmInfoNode(nodeId);
        MqttJvmCpuVO mqttJvmCpuVO = JvmCpuNodeWrapper.build().entityVO(mqttMetricCache);
        return R.data(mqttJvmCpuVO);
    }

    /**
     * 节点指标
     *
     * @param nodeId
     * @return
     */
    @RequestMapping("/metric/metrics")
    public R<Map<String, Object>> metrics(@Param("nodeId") String nodeId) {
        return R.data(mqttMetricService.metricNodeInfo(nodeId));
    }

    /**
     * 端点
     * Endpoints 信息
     *
     * @return
     */
    @RequestMapping("/endpoint/node")
    public R<MqttEndpointNodeVO> endpointNodes(@Param("nodeId") String nodeId) {
        MqttMetricCache mqttNodeMetricCache = mqttMetricService.endpointNodes(nodeId);
        MqttEndpointNodeVO mqttEndpointNodeVO = EndpointNodeWrapper.build().entityVO(mqttNodeMetricCache);
        return R.data(mqttEndpointNodeVO);
    }

}
